home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 46 / Amiga Format CD46 (1999-10-20)(Future Publishing)(GB)[!][issue 1999-12].iso / -in_the_mag- / synth_studies / resgrep03b / source / settings.cc < prev    next >
C/C++ Source or Header  |  1999-09-15  |  3KB  |  139 lines

  1. //
  2. // Load and Save settings
  3. //
  4.  
  5. extern "C" {
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. char *strdup(char *);
  9. };
  10.  
  11. #include "export.h"
  12. #include "resgrep.h"
  13. #include "utils.h"
  14.  
  15. #define MAGIC_TEXT   "ResGrepSettingsFile"
  16.  
  17. static char *SettingsFileName="ResGrep:etc/settings";
  18.  
  19. extern list *conversions;
  20.  
  21. void freeconvert(list *c)
  22. {
  23.    while( c->getfirst()->getsucc()!=NULL )
  24.       delete c->remhead();
  25.    return;
  26. }
  27.  
  28. void savesettings(void)
  29. {
  30.    FILE *out;
  31.    convert *n;
  32.  
  33.    if( (out=fopen(SettingsFileName,"w"))==NULL )
  34.    {
  35.       ResError("Can't open file to\nwrite settings to.");
  36.       return;
  37.    }
  38.    fprintf(out,"%s\n%d\n%d\n",MAGIC_TEXT,VERSION,REVISION);
  39.    for(n=(convert *)conversions->getfirst();((node *)n)->getsucc();((node *)n)=n->getsucc())
  40.       fprintf(out,"###\n%s\n%s\n%s\n%d\n%d\n%s\n%d\n%d\n",
  41.           pack2cstr(n->getpack()),n->getname(),n->command,
  42.           n->isARexx,n->sendto,n->filename,n->builtin,
  43.           n->funcnum);
  44.    fprintf(out,"!!!\n");
  45.    fclose(out);
  46.    return;
  47. }
  48.  
  49. void savesettingsas(void)
  50. {
  51.    savesettings();
  52.    return;
  53. }
  54.  
  55. void skipnewline(char *s)
  56. {
  57.    if( strlen(s)<=0 )
  58.       return;
  59.    if( s[strlen(s)-1]=='\n' )
  60.       s[strlen(s)-1]='\0';
  61.    return;
  62. }
  63.  
  64. void loadsettings(void)
  65. {
  66.    FILE *in;
  67.    list *co=new list();
  68.    convert *c;
  69.    char buffer[1024];
  70.  
  71.    if( (in=fopen(SettingsFileName,"r"))==NULL )
  72.    {
  73.       ResError("Can't open setting file.");
  74.       return;
  75.    }
  76.    fgets(buffer, 1024, in);
  77.    skipnewline(buffer);
  78.    if( strcmp(buffer,MAGIC_TEXT)!=NULL )
  79.    {
  80.       ResError("Setting file corrupted.");
  81.       return;
  82.    }
  83.    fgets(buffer, 1024, in);
  84.    if( atoi(buffer)>VERSION )
  85.    {
  86.       ResError("Version in setting file to small.");
  87.       return;
  88.    }
  89.    fgets(buffer, 1024, in);
  90.    if( atoi(buffer)>REVISION )
  91.       ResWarning("Revision in setting file to small.");
  92.    fgets(buffer, 1024, in);
  93.    skipnewline(buffer);
  94.    while( !feof(in) && strcmp(buffer,"###")==0 )
  95.    {
  96.       char Cpack[7], Cname[1024], Ccommand[1024], CisARexx[5], Csendto[5];
  97.       char Cfilename[1024], Cbuiltin[5], Cexport[7];
  98.  
  99.       fgets(Cpack, 7, in);
  100.       skipnewline(Cpack);
  101.       fgets(Cname, 1024, in);
  102.       skipnewline(Cname);
  103.       fgets(Ccommand, 1024, in);
  104.       skipnewline(Ccommand);
  105.       fgets(CisARexx, 5, in);
  106.       skipnewline(CisARexx);
  107.       fgets(Csendto, 5, in);
  108.       skipnewline(Csendto);
  109.       fgets(Cfilename, 1024, in);
  110.       skipnewline(Cfilename);
  111.       fgets(Cbuiltin, 5, in);
  112.       skipnewline(Cbuiltin);
  113.       fgets(Cexport, 7, in);
  114.       skipnewline(Cexport);
  115. /*printf("%08lx %d '%s' '%s' %d %d '%s' %d\n",
  116.          cstr2pack(Cpack), atoi(Cexport), Cname, Ccommand,
  117.          (bool)atoi(CisARexx), (send)atoi(Csendto),
  118.          Cfilename, (bool)atoi(Cbuiltin) );
  119.  
  120. */
  121.       co->addtail( new convert (
  122.          cstr2pack(Cpack), atoi(Cexport), (char *)strdup(Cname), Ccommand,
  123.          (bool)atoi(CisARexx), (send)atoi(Csendto),
  124.          Cfilename, (bool)atoi(Cbuiltin)) );
  125.       fgets(buffer, 1024, in);
  126.       skipnewline(buffer);
  127.    }
  128.    if( strcmp(buffer,"!!!")!=0 )
  129.    {
  130.       ResError("Setting file corrupted.");
  131.       freeconvert(co);
  132.       return;
  133.    }
  134.    freeconvert(conversions);
  135.    conversions = co;
  136.    fclose(in);
  137.    return;
  138. }
  139.